In a computer system, interrupts are used to signal the microprocessor, without having the microprocessor systematically checking each peripheral. Asynchronous peripheral devices coupled to the processor generate an interrupt signal when they wish to communicate with the microprocessor. The interrupt signal can be acted upon by the microprocessor following the execution of any instruction, if interrupt events of the type occurring are enabled. If an interrupt signal is received, the microprocessor stores the program counter and other state information prior to transferring control to the interrupt service program. The service program is then executed by the microprocessor. When the service program terminates, the microprocessor restores its previous state and resumes executing the original program.
In the case of the PCMCIA expansion socket, commonly found on, but not limited to, notebook PCs, a single interrupt pin is available from the card inserted into the socket. Typically, the host interface controller has the capability to route that interrupt request to one of a plurality of interrupts available in the PC. The selection process is based on the hardware resources available in the system, and the requirements of the card-specific driver and host computer operating system. In normal operation, this process is performed automatically by the system, after card insertion has been detected and a determination made based on the above parameters.
Because of the variety of cards which may be inserted into the PCMCIA socket, and their varying requirements, and due to a lack of prior knowledge of what other cards may already be inserted into such a system, the card support software is typically designed to be able to operate with any of a variety of interrupts which may be provided to it by the card installation software. However, limitations in the PC hardware and operating system architecture may dictate that a particular interrupt must be shared by two peripherals.
A common type of PCMCIA card implements a serial communication port. Often, these cards will also be equipped with Modem and/or Fax capabilities. Serial communication ports (including Modems and Faxes) in the PC environment are referred to as COM ports. The n-th COM port is designated COMn. Frequently, a PCMCIA card carrying a serial communication port will be configured by the installation software to appear exactly as such a function would appear were it installed permanently on the computer motherboard, or in an internal expansion bus slot. Peripherals configured as such can then be operated by existing software, which expects the hardware to appear at rigidly defined addresses, and to manifest a well defined set of properties, including the use of specific interrupts in a defined and standardized manner, including the ability to share a single interrupt. The nth interrupt request line is designated IRQn in PC systems.
In the case of an on-motherboard or expansion-slot based peripheral, typically each device is coupled to an IRQ using a three-state buffer. The outputs of the three-state buffers are coupled to an interrupt controller; the output of the interrupt controller is coupled to the microprocessor. Usually, two COM ports will share a common IRQ line. For example, COM1 and COM3 usually share the same IRQ line to the interrupt controller. Software determines whether COM1 or COM3 will be able to generate an interrupt. If COM1 is selected, than the three-state buffer coupled to COM1 is enabled and COM1 is able to generate an interrupt signal to the interrupt controller, while the three-state buffer coupled to COM3 will remain in a high impedance state. The interrupt controller receives the signals and transmits them to the microprocessor. The IRQ lines are edge sensitive.
A deficiency in the PCMCIA specification has caused problems with the traditional operation of shared interrupts. PCMCIA defines a standard for ports and cards which allows a variety of different peripheral cards to be plugged into the ports for use with the computer system. An interface component is coupled between the port and the microprocessor to control the interaction between the devices. The COM port is located on the PCMCIA card with the three-state buffer. The output from the three-state buffer is fed to the interface component. However, the enable signal, derived in the COM-port-equipped PCMCIA card is never transmitted to the interface component, preventing the use of a three-state buffer within the interlace component. As a result, in a strictly PCMCIA compliant system, whenever a PCMCIA card is plugged into the peripheral port, the assigned host computer IRQ line may be driven by the PCMCIA interface controller as requested by the card, and the other COM port sharing the interrupt line may be, and, in fact, is typically completely prevented from using that interrupt line.
Accordingly, it is a general object of the present invention to provide an apparatus for processing PCMCIA interrupt requests in a manner which allows host IRQs to be shared between multiple PCMCIA cards, as well as between PCMCIA cards and peripherals permanently resident in a system.